package com.demo.woziqi;

import com.demo.woziqi.dao.UserDAO;
import com.demo.woziqi.entity.User;
import com.demo.woziqi.util.GameConstant;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;

/**
 * @Author 宋明松
 * @Version V1.0.0
 * @Date 2022-05-23
 * <p>
 * 用户登录窗口
 */
public class GameLoginUserStage extends Stage {
    private Button loginBtn;// 登录
    private Button exBtn;// 注册
    private Label username; // 账号
    private Label password; // 密码
    private TextField nameField;// 账号
    private TextField pwdField;// 密码

    private Label userNameError; // 账号密码错误提示

    private Hyperlink link = new Hyperlink("免费注册"); // 注册超链接

    public static Stage inputStage;

    public GameLoginUserStage() {
        /*
         * 初始化窗体
         * */
        inputStage = this;
        setTitle("账号登录");
        Pane panes = new Pane();
        this.setResizable(false); // 固定大小
        setHeight(375);
        setWidth(500);
        /*
         * 初始化按钮，超链接等节点
         * */
        this.username = new Label("账   号：");
        this.password = new Label("密   码：");
        this.nameField = new TextField(GameConstant.username);
        this.pwdField = new PasswordField();
        this.loginBtn = new Button("登    录");
        this.exBtn = new Button("取    消");
        this.userNameError = new Label();
        /*
         * 按钮，超链接定位
         * */
        Font font = Font.font("KaiTi", FontWeight.BOLD, FontPosture.ITALIC, 25);
        username.setLayoutX(50);
        username.setLayoutY(90);
        username.setFont(font);
        username.setTextFill(Color.BLACK);
        nameField.setLayoutX(180);
        nameField.setLayoutY(90);
        nameField.setPromptText("请输入账号");

        Font fonts = Font.font("KaiTi", FontWeight.BOLD, FontPosture.ITALIC, 20);
        link.setLayoutX(370);
        link.setLayoutY(300);
        link.setFont(fonts);

        password.setLayoutX(50);
        password.setLayoutY(150);
        password.setFont(font);
        password.setTextFill(Color.BLACK);
        pwdField.setLayoutX(180);
        pwdField.setLayoutY(150);
        pwdField.setPromptText("请输入密码");

        /*
         * 账号密码错误，请重新输入 提示Label
         * */
        userNameError.setLayoutX(180);
        userNameError.setLayoutY(200);
        userNameError.setTextFill(Color.RED);
        userNameError.setFont(font);

        loginBtn.setLayoutX(110);
        loginBtn.setLayoutY(250);
        loginBtn.setTextFill(Color.BLACK);
        exBtn.setLayoutX(300);
        exBtn.setLayoutY(250);
        exBtn.setTextFill(Color.BLACK);
        /*
         * 将按钮，超链接等节点添加到面板
         * */
        panes.getChildren().add(username);
        panes.getChildren().add(nameField);
        panes.getChildren().add(password);
        panes.getChildren().add(pwdField);
        panes.getChildren().add(exBtn);
        panes.getChildren().add(loginBtn);
        panes.getChildren().add(link);
        panes.getChildren().add(userNameError);

        Scene scene = new Scene(panes); // 场景，存放面板
        scene.getStylesheets().add(String.valueOf(getClass().getClassLoader().getResource("login.css"))); //引入css
        this.setScene(scene); // 将场景设置到主舞台

        loginBtn.setOnMouseClicked(e -> { // 登录按钮鼠标点击事件
            if (nameField.getText().isEmpty()) { // 用户名名为空
                userNameError.setText("账号不能为空!"); // 将报错信息添加到Label中
                return;
            } else if (pwdField.getText().isEmpty()) { // 密码为空
                userNameError.setText("密码不能为空!");// 将报错信息添加到Label中
                return;
            }
            UserDAO userDAO = new UserDAO();
            User user = new User();
            user.setUsername(nameField.getText());// 将文本框中的数据实例化到用户中
            user.setPwd(pwdField.getText());
            User u = userDAO.getLogin(user);
            if (u != null) { // 登录成功
                GameInputPortAndIPStage gameInputPortAndIPStage = new GameInputPortAndIPStage();
                gameInputPortAndIPStage.show(); // 显示IP,端口设置窗体
                this.close(); // 关闭当前窗体
                GameConstant.user = u;
                GameConstant.username = u.getUsername(); // 为登录框的用户名赋值，避免再次输入
            } else {
                userNameError.setText("账号密码错误");
            }
        });
        exBtn.setOnMouseClicked(e -> { // 取消按钮鼠标点击事件
            GoApplicationStage.stage.show(); // 显示程序模式选择窗口
            this.close();// 关闭当前窗体
        });

        link.setOnMouseClicked(e -> { // 免费注册超链接鼠标点击事件
            GameRegisterUserStage gameRegisterUserStage = new GameRegisterUserStage();
            gameRegisterUserStage.show(); // 显示注册窗体
            this.close();// 关闭当前窗体
        });
        this.setOnCloseRequest(e -> { // 关闭窗口事件监听
            GoApplicationStage.stage.show(); // 显示程序模式选择窗口
            this.close();
        });
    }
}
